# 给定一个大小为 n 的数组，找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
#
#  你可以假设数组是非空的，并且给定的数组总是存在多数元素。
#
#
#
#  示例 1:
#
#  输入: [3,2,3]
# 输出: 3
#
#  示例 2:
#
#  输入: [2,2,1,1,1,2,2]
# 输出: 2
#
#  Related Topics 位运算 数组 分治算法
#  👍 727 👎 0


# leetcode submit region begin(Prohibit modification and deletion)
from typing import List


class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        # 摩尔投票法，原理是多数元素会和 其他元素相互抵消，最终留下来的
        # 一定是 多数元素

        res = nums[0]

        count = 1
        for i in range(1, len(nums)):
            num = nums[i]
            if res == num:
                count += 1
            else:
                count -= 1

            if count == 0:
                res = num
                count = 1

        return res


# leetcode submit region end(Prohibit modification and deletion)

print(Solution().majorityElement([3,2,3]))
